import wx

class MyFrame(wx.Frame):
    def __init__(self, *args, **kw):
        super(MyFrame, self).__init__(*args, **kw)

        # 创建一个面板
        panel = wx.Panel(self)

        # 创建一个垂直布局的 sizer
        vbox = wx.BoxSizer(wx.VERTICAL)

        # 创建一个可折叠的面板
        collpane = wx.CollapsiblePane(panel, label="菜单", style=wx.CP_DEFAULT_STYLE | wx.CP_NO_TLW_RESIZE)
        vbox.Add(collpane, 0, wx.EXPAND | wx.ALL, 5)

        # 获取可折叠面板的内部面板
        pane = collpane.GetPane()

        # 在内部面板中添加一些控件（例如按钮）
        pane_sizer = wx.BoxSizer(wx.VERTICAL)
        for i in range(5):
            btn = wx.Button(pane, label=f"选项 {i+1}")
            pane_sizer.Add(btn, 0, wx.ALL, 5)

        # 设置内部面板的布局
        pane.SetSizer(pane_sizer)

        # 设置主面板的布局
        panel.SetSizer(vbox)

        # 绑定折叠面板的展开/折叠事件
        self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.OnPaneChanged, collpane)

        # 设置窗口大小
        self.SetSize((300, 200))
        self.SetTitle("抽屉式菜单示例")
        self.Centre()

    def OnPaneChanged(self, event):
        # 当面板展开或折叠时触发
        collpane = event.GetEventObject()
        if collpane.IsCollapsed():
            print("面板已折叠")
        else:
            print("面板已展开")

if __name__ == "__main__":
    app = wx.App(False)
    frame = MyFrame(None)
    frame.Show()
    app.MainLoop()
